home *** CD-ROM | disk | FTP | other *** search
/ Winzipper / Winzipper_ISO.iso / programming / oracle7 7.2 / DB / UTIL72 / PRVTPOOL.SQL < prev    next >
Encoding:
Text File  |  1995-05-09  |  5.2 KB  |  145 lines

  1. rem 
  2. rem $Header: prvtpool.sql 7020200.1 95/02/15 18:25:51 cli Generic<base> $ 
  3. rem 
  4. Rem  Copyright (c) 1991 by Oracle Corporation 
  5. Rem    NAME
  6. Rem      prvtpool.sql - dbms_shared_pool utility package (private).
  7. Rem    DESCRIPTION
  8. Rem      This package allows you to display the sizes of objects in the 
  9. Rem      shared pool, and mark them for keeping or unkeeping in order to
  10. Rem      reduce memory fragmentation.
  11. Rem    RETURNS
  12. Rem 
  13. Rem    NOTES
  14. Rem    MODIFIED   (MM/DD/YY)
  15. Rem     bhirano    11/30/94 -  merge changes from branch 1.1.710.2
  16. Rem     rtaranto   10/28/94 -  merge changes from branch 1.1.710.3
  17. Rem     rtaranto   10/18/94 -  doit can now handle keeping triggers
  18. Rem     adowning   03/25/94 -  merge changes from branch 1.1.710.1
  19. Rem     bhirano    09/27/94 -  add aborted_request_threshold icd to dbms_pool
  20. Rem     adowning   02/23/94 -  Branch_for_patch
  21. Rem     adowning   02/23/94 -  Creation
  22. Rem     ajasuja    01/06/94 -  merge changes from branch 1.1.312.1
  23. Rem     rkooi      04/20/93 -  change psdkeep to psdkep 
  24. Rem     ajasuja    11/05/93 -  handle UNIX addresses
  25. Rem     rkooi      12/08/92 -  Creation 
  26.  
  27. Rem DBA_KEEPSIZES - size that will be keeped for a pl/sql object
  28. Rem   For instance, do:
  29. Rem     select * from dba_keepsizes where totsize>30 and owner='SCOTT'
  30. Rem     order by totsize desc;
  31. Rem   to see all PL/SQL objects owned by SCOTT which are larger than 30Kbytes
  32. create or replace view dba_keepsizes (totsize, owner, name) as
  33.   select trunc((sum(parsed_size)+sum(code_size))/1000),
  34.          owner, name
  35.   from dba_object_size
  36.   where type in ('PACKAGE','PROCEDURE','FUNCTION','PACKAGE BODY','TRIGGER')
  37.   group by owner, name;
  38.  
  39. create or replace package body dbms_shared_pool is
  40.   procedure psdkep(schema varchar2, name varchar2, cursor_addr raw,
  41.                    cursor_hash binary_integer, keep boolean, flag char);
  42.   pragma interface(C, psdkep);
  43.   
  44.   procedure psdart(t_size binary_integer);
  45.   pragma interface(C, psdart);
  46.   
  47.   procedure doit(name varchar2, keep boolean, flag char) is
  48.     owner      varchar2(30);
  49.     part1      varchar2(30);
  50.     part2      varchar2(30);
  51.     dblink     varchar2(30);
  52.     part1_type number;
  53.     objno      number;
  54.     context    number;
  55.   begin
  56.     if flag <> 'P' and flag <> 'p' and flag <> 'R' and flag <> 'r' then
  57.       psdkep('', '', hextoraw(substr(name,1,8)),
  58.          to_number(substr(name,10)), keep, 'c');
  59.     else
  60.       if flag <> 'P' and flag <> 'p' then
  61.     context := 3;
  62.       else
  63.     context := 1;
  64.       end if;
  65.       dbms_utility.name_resolve(name, context, owner, part1, part2, dblink,
  66.                                 part1_type, objno);
  67.       psdkep(owner, nvl(part1, part2), null, null, keep, flag);
  68.     end if;
  69.   end;
  70.  
  71.   procedure keep(name varchar2, flag char) is
  72.   begin
  73.     doit(name, TRUE, flag);
  74.   end;
  75.  
  76.   procedure unkeep(name varchar2, flag char) is
  77.   begin
  78.     doit(name, FALSE, flag);
  79.   end;
  80.  
  81.   procedure aborted_request_threshold(threshold_size number) is
  82.     t_size binary_integer;
  83.     t_high binary_integer;
  84.     t_low  binary_integer;
  85.   begin
  86.     t_size := threshold_size;
  87.     t_high := 2147483647;
  88.     t_low  := 5000; 
  89.     if t_size >= t_low and t_size <= t_high then
  90.       psdart(t_size);
  91.     else
  92.       raise_application_error(-20000, 'threshold_size not in valid range: (' ||
  93.         t_low || ' - ' || t_high || ')');    
  94.     end if;
  95.   end;
  96.  
  97.   procedure sizes(minsize number) is
  98.     cursor c1(msize number) is
  99.         select to_char(sharable_mem/1000, '999999') sz,
  100.                decode(kept_versions, 0, '      ',
  101.                  rpad('YES(' || to_char(kept_versions) || ')', 6)) keeped,
  102.                rawtohex(address) || ',' || to_char(hash_value) name,
  103.                substr(sql_text,1,354) extra
  104.         from v$sqlarea
  105.         where sharable_mem > msize*1000
  106.       union
  107.         select to_char(sharable_mem/1000, '999999') sz,
  108.                decode(kept, 'YES', 'YES   ', '      ') keeped,
  109.                owner || '.' || name || lpad(' ', 29 - (length(owner) +
  110.                  length(name))) || '(' || type || ')' name,
  111.                null extra
  112.         from v$db_object_cache v
  113.         where sharable_mem > msize*1000
  114.       order by 1 desc;
  115.     l number;
  116.     i number;
  117.   begin
  118.    dbms_output.put_line('SIZE(K) KEPT   NAME');
  119.    dbms_output.put_line('------- ------ ---------------------------------------------------------------');
  120.     for rec in c1(minsize) loop
  121.       if substr(rec.name,1,1) in ('0','1','2','3','4','5','6','7','8','9') then
  122.         l := length(rec.extra);
  123.         i := 0;
  124.         while i < l loop
  125.           if i = 0 then
  126.             dbms_output.put_line(rec.sz || ' ' || rec.keeped || ' ' ||
  127.                                  substr(rec.extra,i,63));
  128.             i := i + 63;
  129.           else
  130.             dbms_output.put_line('                   ' ||
  131.                                  substr(rec.extra,i,59));
  132.             i := i + 59;
  133.           end if;
  134.         end loop;
  135.         dbms_output.put_line(rpad('                   (' || rec.name ||
  136.                              ')', 45) || '(CURSOR)');
  137.       else
  138.         dbms_output.put_line(rec.sz || ' ' || rec.keeped || ' ' || rec.name);
  139.       end if;
  140.     end loop;
  141.   end;
  142. end;
  143. /
  144.  
  145.